package com.neuedu.corejava.ch5;

public class ReferenceParameter {
	/**
	 * 
	 * 基本数据类型与引用数据类型在方法调用时的差别
	 * 
	 * 
	 * 
	 * 
	 * 
	 * @param args
	 */
	
	public void change(int a){//参数是基本数据类型
		a=12;
		System.out.println("in method "+a);
	}
	
	public void change(String  str){//参数是一个对象类型，引用数据类型
	    str="in method";
		System.out.println(str);
	}
	
	public void change(int[]  array){//数组是一个引用数据类型
	    array[0]=9;    //修改数组内部的数据会影响数据实参，没有对数组重新赋值
	    for(int i:array){
	    	System.out.print(i+"\t");
	    }
	    System.out.println();
	}
	
	public void change2(int[]  array){//数组是一个引用数据类型
	    array=new int[]{2,3,4,5};//修改数组的引用，重新对数组进行赋值操作，方法内部的修改不会影响到方法的外部
	    for(int i:array){
	    	System.out.print(i+"\t");
	    }
	    System.out.println();
	}
	
	

	public static void main(String[] args) {
		ReferenceParameter rp=new ReferenceParameter();
		
		//1.基本数据类型
		int a=10;
		rp.change(a);//传值调用，传递的参数是参数的数据值
		System.out.println("after change"+a);

		String str="Hello 引用数据类型";
		rp.change(str);//传引用调用，传递的参数是一个引用数据类型
		System.out.println("after change"+str);
				
			
		int[] array=new int[]{1,2,3,4,5,6};
		rp.change(array);//传引用调用，传递的参数是一个引用数据类型
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		
		 array=new int[]{1,2,3,4,5,6};
		rp.change(array);//传引用调用，传递的参数是一个引用数据类型，在方法内部修改引用，不影响方法外面（实参）
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		
		
	}

}
